#pragma once
#include <mysql/mysql.h>
#include <iostream>
using namespace std;

class mysqlconn
{
public:
    // 初始化对象
    mysqlconn()
    {}
    
    mysqlconn(const string& host, const string& user, const string& passwd, const string& db)
    {
        mysql_connection(host, user, passwd, db);
    }

    void mysql_connection(const string& host, const string& user, const string& passwd, const string& db)
    {
        establish_db_connection(host, user, passwd, db);
        mysql_set_character_set(_conn, "utf8");
    }
    
    ~mysqlconn()
    {
        mysql_close(_conn);
    }

    // 建立数据库连接
    void establish_db_connection(const string& host, const string& user, const string& passwd, const string& db)
    {
        _conn = mysql_init(NULL);

        if (_conn == NULL)
        {
            fprintf(stderr, "mysql_init() failed\n");
            return;
        }

        if (mysql_real_connect(_conn, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), 0, NULL, 0) == NULL)
        {
            fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(_conn));
            return;
        }
    }

    // 获取结果
    MYSQL_RES* executeSql(const string &sql)
    {
        // 执行sql语句
        if(0 != mysql_query(_conn, sql.c_str()))
        {
            fprintf(stdout, "%s execute error", sql.c_str());
            return nullptr;
        }
        // 提取结果
        MYSQL_RES *res = mysql_store_result(_conn);
        return res;
    }

private:
    MYSQL* _conn;
};